iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
DevOps

搞定Docker網路系列 第 1

Docker的網路-bridge篇(1/2)

  • 分享至 

  • xImage
  •  

常見網路需求-bridge

這邊嘗試用情境來說明Docker使用者的網路需求,最常需要的就是我們要讓容器跟外界,尤其很多需求是容器之間要可以互相溝通,不過預設是無法這樣做的,本篇的最重要目標就是:讓容器互通

一般來說,Docker 預設的網路設定為bridge,會建議使用docker network指令進行container網路的管理,後面就知道如果docker不用這個指令執行,會有什麼問題發生。

這邊分析一下,如果docker network create intra之後,HOST的網卡會如何呈現:

以上呈現的就是host使用ifconfig,跟docker network ls,可以看到網卡會跟network物件的名稱有相關,另外ifconfig跟docker network inspect出的網路資訊也會相同

另外host ip route也可以觀察看看

實驗架構

後面都會使用已經安裝好常用網路工具的image: tedyang/ubuntu:1120912來進行操作,指令分別為:

docker run --rm -it --network=kind --name=ubuntu_1 tedyang/ubuntu:1120912
docker run --rm -it --network=intra --name=ubuntu_2 tedyang/ubuntu:1120912

網路連通測試:容器對Host、對外、Host對容器、容器對容器

  1. 容器對Host ping:pass

  2. 容器對外部 ping:pass

  1. Host對容器:pass

  1. 容器對容器:Deny

原因分析:Host並沒有開防火牆,ip route也有納入容器所使用的網段跟gw資訊,所以容器不能互通可能是Docker預設的模式。

經由官方文件檢視,是docker會修改iptables的設定,讓container 達成isolation

官方說明:https://docs.docker.com/network/packet-filtering-firewalls/

解法:增加網卡

docker network connect kind 7e8

作法就是增加對方的網卡,下ifconfig可以看到,已經增加一張同網段的網卡

測試結果:
ubuntu_1->ubuntu_2:x(因為這個container我沒有加對方的網卡,所以不通)
ubuntu_2->ubuntu_1:PASS

有些文章會用--link的方式讓容器互通,但官方已經說明未來不會支援這個語法了,所以建議還是使用官方建議的客製設定network的方式讓容器彼此互通。

官方說明將會移除--link的語法:
https://docs.docker.com/network/links/

參考:
https://docs.docker.com/engine/tutorials/networkingcontainers/


下一篇
Docker的網路-bridge篇(2/2)
系列文
搞定Docker網路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言